package com.qing.library_manager.common.constant.authority;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

/**
 * <p>TODO</p>
 *
 * @author Yjx
 * @version 1.0.0
 * @since 2021/12/13
 **/
@Aspect
@Component
public class authorityInterceptor {

    // 表明以authorityFilter方法作为切入点，同时以talkSome作为增强的代理方法，接下来的几种通知类型全部针对talkSome进行，也等于间接对authorityFilter进行增强
    @Pointcut("@annotation(com.qing.library_manager.common.constant.authority.authorityFilter)")
    public void talkSome(){

    }

    @Around("talkSome()")
    public Object Interceptor(ProceedingJoinPoint joinPoint){
        System.out.println("AOP环绕通知开始～～～");
        Object retmsg=null;
        try {
            // 通过proceed（）调用目标方法，同时触发Before前置通知，如果在环绕通知中不通过切入点JoinPoint.proceed()调用目标方法，前置通知会失效。
            joinPoint.proceed();
        } catch (Throwable e) {
            e.printStackTrace();
        }
        System.out.println("环绕通知结束");
        Object result = null;
        return result;
    }

    @Before("talkSome()")
    public void before(JoinPoint joinPoint) throws Throwable {

    }

    @After("talkSome()")
    public void after() {
        System.out.println("后置通知：执行结束，撒花！");
    }
}
